#include <iostream>
using namespace std;

int main01(int argc, char const *argv[]){
        int i;
       printf("hello\n");
       int k;  //早期版本c编译器编译不通过
       i = 10;
       k =11;
       printf("i:%d, k:%d \n",i, k);
        return 0;
}


int main02(int argc, char const *argv[]){
        register int a = 0;
        printf("&a: %d \n", &a); //c编译不通过 c++编译通过
        return 0;
}

/*
在c语言中,重复定一个多个同名的全局变量是合法的
        在c++中,不允许定义多个同名的全局变量
c语言中多个同名的全局变量最终会被链接到全局数据区的同一个地址空间上
 c++直接拒绝二义性
int g_a;
int g_a = 100; //c编译器 编译通过 c++编译器不通过
int main(int argc, char const *argv[]){
        printf("hello world g_a:%d \n", g_a);
        return 0;
}
*/

/*
//struct 关键字 class关键字 完成的功能是一样的
//区别还是有的 抛砖
struct Teacher{
        char name[32];
        int age;
};

int main(int argc, char const *argv[]){
        Teacher t1; //c编译器会报错 必须加上struct c++不需要加 struct
        t1.age = 10;
        return 0;
}
*/

/*
c++中所有的变量和函数必须有类型
        c语言中的默认类型在c++中是不合法的
函数f的返回值是什么类型,参数又是什么类型？
函数g可以接受多少个参数?

f(i){
        printf("i = %d\n",i);
}
g(){
        return 5;
}
int main(int argc, char const *argv[])
{
        f(10);
        printf("g() = %d\n", g(1,2,3,4,5)); //c编译器通过 c++是不可以
        return 0;
}
*/

int main(int argc, char const *argv[])
{
        printf("以上是cpp功能增强\n");
        return 0;
}

